home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / SoundAndMusic / cmix / filters / ellipse.mac.c < prev    next >
C/C++ Source or Header  |  1991-12-09  |  1KB  |  64 lines

  1. #include "../H/ugens.h"
  2. #include "ellipse.h"
  3.  
  4. ell(p,n_args)
  5. float *p;
  6. int n_args;
  7. {
  8.     float ps[10][4],c[10][4],xnorm;
  9.     long i,nsamps,nchin,nchout;
  10.     float ellipse(),x[4],y[4];
  11.     int   nsects;
  12.  
  13.     nsamps=setnote(p[0],p[1],1);
  14.            setnote(p[2],p[1],0);
  15.     nchin = p[3];
  16.     nchout = p[4];
  17.     ellpset(&p[5],ps,c,&xnorm,&nsects);
  18.     for(i=0; i<4; i++) x[i] = y[i] = 0.;
  19.     for(i=0;i<nsamps;i++) {
  20.         GETIN(y,0);
  21.         ELLIPSE(x[nchout],y[nchin],ps,c,xnorm,nsects); 
  22.         ADDOUT(x,1); 
  23.         }
  24.     endnote(1);
  25. }
  26.  
  27. float ellipse(x,ps,c,xnorm,nsects)
  28. int nsects;
  29. float x,ps[10][4],c[10][4],xnorm;
  30. {
  31.     register int m;
  32.     float op;
  33.  
  34.     for(m=0;m<nsects;m++) {
  35.         op = x + c[m][0] * ps[m][0] + c[m][2] * ps[m][1]
  36.                - c[m][1] * ps[m][2] - c[m][3] * ps[m][3];
  37.         ps[m][1] = ps[m][0];
  38.         ps[m][0] = x;
  39.         ps[m][3] = ps[m][2];
  40.         ps[m][2] = op;
  41.         x = op;
  42.         }
  43.     return(x*xnorm);
  44. }
  45.  
  46. ellpset(list,ps,c,xnorm,nsects)
  47. float *list,ps[10][4],c[10][4],*xnorm;
  48. int *nsects;
  49. {
  50. /* the first argument in the list is the number of sections */
  51.     int m,i,j;
  52.     *nsects = (int)list[0];
  53.     i=1;
  54.     for(m=0;m < *nsects ;m++) {
  55.         for(j=0;j<4;j++)  {    
  56. printf("%f %d %d %f\n",c[m][j],j,m,list[i]);
  57.                  c[m][j] = list[i++];
  58.              ps[m][j] = 0;
  59.         }
  60.     }
  61.     *xnorm = list[i];
  62. printf("xnorm %d %f %f\n",i,*xnorm,list[i-1]);
  63. }
  64.